package day5;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

//a.利用周期定长线程池来模拟双
// 色球(6个红球(1-33之间)
// 1个蓝球(1-16之间))摇奖过程,
// 首先双色球摇奖开始需要5S，之后每隔2S摇
// 出一个红球  最后摇出一个蓝球  摇奖完毕后
//打印最终 双色球所有红球和蓝球.
//拓展: 也可以摇奖之前添加一个用户输
// 入红球和蓝球的环节最终统计中了几个球
public class Work1 {
    static AtomicInteger count=new AtomicInteger(7);
    static int blue;
    //红球随机可能出现重复 通过set集合保存(去重)
    static Set<Integer> set=new HashSet<>();
    public static void main(String[] args) {
        Random r=new Random();
        ScheduledExecutorService ses=
                Executors.newScheduledThreadPool(1);
        System.out.println("开始摇奖 等待5S...");
        ses.scheduleAtFixedRate(()->{
            if(count.get()>1){
                int red;
                do {
                    red = r.nextInt(33) + 1;//定义红球
                    int oldlen = set.size();
                    set.add(red);//存储好后自动去重
                    int newLen = set.size();
                    if(oldlen!=newLen) break;
                }while(true);
                System.out.println("2S后生成一个红球:"+red);
            }else {
                blue = r.nextInt(16) + 1;//定义蓝球
                System.out.println("2S后生成一个蓝球:"+blue);
            }
            count.getAndDecrement();//减一
        },5,2, TimeUnit.SECONDS);
        //监听摇奖结束了 要停止周期任务
        while(count.get()!=0){}
        ses.shutdown();
        System.out.println("摇奖结束!!!");
        System.out.println("红球:"+set+",蓝球:"+blue);

    }
}
